package net.freestu.sola.web.spider.urlfilter;

import java.util.ArrayList;
import java.util.Iterator;

import net.freestu.sola.web.global.GlobleVar;

public class LinksForbider extends FilterDecorator{
	
		
		  public LinksForbider(LinkFilter linkfilter){
				
				super(linkfilter);
			}
			
			//这个函数的质量有点高。复用性非常好。
			public void setState(){//检测状态。对LinkFilter的状态进行设置。这个貌似可以设置成private
				
				String str=linkfilter.getContent();//获取URL。
				int state=linkfilter.getState();//获取状态。
				
				if(state==URLFORBID){//如果不是不能通过的。用于都是URLFORBID
					linkfilter.setState(URLFORBID);
				}
				if(state==URLSTOP){//如果是处于暂停状态的。需要进行这个过滤器的设置。
					int temp=judgeState(str);
					linkfilter.setState(temp);
				}
				
				if(state==URLPASS){//如果是处于通过状态。表示处于至高无上的权利，可以通过一切过滤器。
					
					linkfilter.setState(URLPASS);
				}
				
				
			}
			
			
			public String getLinkAfterFilter(){//得到过滤后的链接。
				
				setState();//先设置状态。
				
				if(linkfilter.getState()==URLPASS){
					
					return linkfilter.getContent();
					
					}
				if(linkfilter.getState()==URLSTOP){
					
					return linkfilter.getContent();
					}
				
				if(linkfilter.getState()==URLFORBID){
					
					return null;
					}
				
				return null;
			}
			
			
			/**
			 * 核心方法。
			 * @param str
			 * @return
			 */
			private int judgeState(String str){//成功。
				
	                boolean s=true;
	                ArrayList forbidPages=GlobleVar.ForbidLinks;
	                
	                Iterator it=forbidPages.listIterator();
	                
					while(it.hasNext()){
						
						String temp=(String)it.next();
						
						if(cut(str).equals(cut(temp))){//如果是符合后缀名的。
							s=false;
						}
					}
					if(s==true){
						
						return URLSTOP;
						
					}else{
						
						return URLFORBID;
					}
		   }
						
			public String getContent(){//在几个装饰器之间用这个函数传递。
				
				return getLinkAfterFilter();
			}
			
			//垃圾方法
			public int getState(){
				
				setState();
				
				return linkfilter.getState();//这个地方有点错。这个地方必须设置成反应后的啊
			}

		  public void setState(int i){
		  	
		  	linkfilter.setState(i);
		  }
		  
		  
		  private String cut(String str){
				
				String ss=str;
			    if(str!=null){	
				if(str.endsWith("/")){
				int i=str.lastIndexOf("/");
				ss=str.substring(0,i);
				}
			    }
				return ss;
			}
		  	
		  
		  public static void main(String[] args){
		  	
		  	
			System.out.println();  
			  
		  	MyLink ml1=new MyLink("http://www.ajc.cdut.edu.cn/eWebEditor/Example/NewsSystem/NewsFile/1/index.asp");
			//MyLink ml1=new MyLink("http://www.cdut.edu.cn/"); 
			LinksForbider ml2=new LinksForbider(ml1);
		  	String str=ml2.getLinkAfterFilter();
		  	System.out.println(str);
		  }


 }

